Bug 56355 – GtkLabel - Not all changes propagate correctly
authorJan Arne Petersen <jpetersen@jpetersen.org>
Thu, 29 May 2008 18:09:01 +0000 (18:09 +0000)
committerJan Arne Petersen <jap@src.gnome.org>
Thu, 29 May 2008 18:09:01 +0000 (18:09 +0000)
2008-05-29  Jan Arne Petersen  <jpetersen@jpetersen.org>

Bug 56355 – GtkLabel - Not all changes propagate correctly

* gtk/gtklabel.c: (gtk_label_recalculate), (gtk_label_set_label),
(gtk_label_set_markup_with_mnemonic), (gtk_label_parse_uline),
(gtk_label_set_text_with_mnemonic), (gtk_label_set_use_underline):
Call gtk_label_setup_mnemonic from gtk_label_recalculate. Add
notifications of mnemonic-keyval changes.

svn path=/trunk/; revision=20237

ChangeLog
gtk/gtklabel.c

index 9211281355e1d5cc974acf1a899af28bd58aa2cc..d68a6a8bb9f9e5f2ed5bb0d6d80aa22ecc305493 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+2008-05-29  Jan Arne Petersen  <jpetersen@jpetersen.org>
+
+       Bug 56355 – GtkLabel - Not all changes propagate correctly
+
+       * gtk/gtklabel.c: (gtk_label_recalculate), (gtk_label_set_label),
+       (gtk_label_set_markup_with_mnemonic), (gtk_label_parse_uline),
+       (gtk_label_set_text_with_mnemonic), (gtk_label_set_use_underline):
+       Call gtk_label_setup_mnemonic from gtk_label_recalculate. Add
+       notifications of mnemonic-keyval changes.
+
 2008-05-27  Matthias Clasen  <mclasen@redhat.com>
 
        Bug 522084 – GIcon support for GtkIconTheme & GtkImage
index 0b86314fcb5e6cb685cef092760f4a03128e6ea3..e2e4520a0b7440a334d4ea0890b16898ff4f4ab9 100644 (file)
@@ -1558,6 +1558,8 @@ gtk_label_set_attributes_internal (GtkLabel      *label,
 static void
 gtk_label_recalculate (GtkLabel *label)
 {
+  guint keyval = label->mnemonic_keyval;
+
   if (label->use_markup)
     set_markup (label, label->label, label->use_underline);
   else
@@ -1576,11 +1578,12 @@ gtk_label_recalculate (GtkLabel *label)
     }
 
   if (!label->use_underline)
-    {
-      guint keyval = label->mnemonic_keyval;
+    label->mnemonic_keyval = GDK_VoidSymbol;
 
-      label->mnemonic_keyval = GDK_VoidSymbol;
+  if (keyval != label->mnemonic_keyval)
+    {
       gtk_label_setup_mnemonic (label, keyval);
+      g_object_notify (G_OBJECT (label), "mnemonic-keyval");
     }
 
   gtk_label_clear_layout (label);  
@@ -1671,19 +1674,13 @@ void
 gtk_label_set_label (GtkLabel    *label,
                     const gchar *str)
 {
-  guint last_keyval;
-
   g_return_if_fail (GTK_IS_LABEL (label));
   g_return_if_fail (str != NULL);
 
   g_object_freeze_notify (G_OBJECT (label));
 
-  last_keyval = label->mnemonic_keyval;
-
   gtk_label_set_label_internal (label, g_strdup (str));
   gtk_label_recalculate (label);
-  if (last_keyval != label->mnemonic_keyval)
-    gtk_label_setup_mnemonic (label, last_keyval);
 
   g_object_thaw_notify (G_OBJECT (label));
 }
@@ -1799,18 +1796,15 @@ void
 gtk_label_set_markup_with_mnemonic (GtkLabel    *label,
                                    const gchar *str)
 {
-  guint last_keyval;
   g_return_if_fail (GTK_IS_LABEL (label));
 
   g_object_freeze_notify (G_OBJECT (label));
 
-  last_keyval = label->mnemonic_keyval;
   gtk_label_set_label_internal (label, g_strdup (str ? str : ""));
   gtk_label_set_use_markup_internal (label, TRUE);
   gtk_label_set_use_underline_internal (label, TRUE);
   
   gtk_label_recalculate (label);
-  gtk_label_setup_mnemonic (label, last_keyval);
 
   g_object_thaw_notify (G_OBJECT (label));
 }
@@ -3007,13 +3001,10 @@ gtk_label_parse_uline (GtkLabel    *label,
                       const gchar *str)
 {
   guint keyval;
-  guint orig_keyval;
   
   g_return_val_if_fail (GTK_IS_LABEL (label), GDK_VoidSymbol);
   g_return_val_if_fail (str != NULL, GDK_VoidSymbol);
 
-  orig_keyval = label->mnemonic_keyval;
-
   g_object_freeze_notify (G_OBJECT (label));
   
   gtk_label_set_label_internal (label, g_strdup (str ? str : ""));
@@ -3023,9 +3014,12 @@ gtk_label_parse_uline (GtkLabel    *label,
   gtk_label_recalculate (label);
 
   keyval = label->mnemonic_keyval;
-  label->mnemonic_keyval = GDK_VoidSymbol;
-  
-  gtk_label_setup_mnemonic (label, orig_keyval);
+  if (keyval != GDK_VoidSymbol)
+    {
+      label->mnemonic_keyval = GDK_VoidSymbol;
+      gtk_label_setup_mnemonic (label, keyval);
+      g_object_notify (G_OBJECT (label), "mnemonic-keyval");
+    }
   
   g_object_thaw_notify (G_OBJECT (label));
 
@@ -3052,8 +3046,6 @@ gtk_label_set_text_with_mnemonic (GtkLabel    *label,
   g_return_if_fail (GTK_IS_LABEL (label));
   g_return_if_fail (str != NULL);
 
-  last_keyval = label->mnemonic_keyval;
-
   g_object_freeze_notify (G_OBJECT (label));
 
   gtk_label_set_label_internal (label, g_strdup (str ? str : ""));
@@ -3062,8 +3054,6 @@ gtk_label_set_text_with_mnemonic (GtkLabel    *label,
   
   gtk_label_recalculate (label);
 
-  gtk_label_setup_mnemonic (label, last_keyval);
-
   g_object_thaw_notify (G_OBJECT (label));
 }
 
@@ -4010,8 +4000,6 @@ gtk_label_set_use_underline (GtkLabel *label,
 
   gtk_label_set_use_underline_internal (label, setting);
   gtk_label_recalculate (label);
-  if (label->use_underline)
-    gtk_label_setup_mnemonic (label, label->mnemonic_keyval);
 }
 
 /**